旋转方阵
题目描述
Time Limit: 1000 ms
Memory Limit: 256 mb
打印出一个旋转方阵,见样例输出。

输入输出格式
输入描述:
输入一个整数n(1 <= n <= 20), n为方阵的行数。
输出描述:
输出一个大小为n*n的距阵

输入样例#:
5
输出样例#:
1   16  15  14  13
2   17  24  23  12
3   18  25  22  11
4   19  20  21  10
5   6   7   8   9

#include<bits/stdc++.h>
using namespace std;

int main(){
    int n;
    while(scanf("%d",&n)!=EOF){
        int k=1;//控制打印数字
        int num[n+1][n+1]={0};//1~n存放
        int down=n;
        int right=n;
        int up=1;
        int left=1;
        while(1){
            for(int i=up;i<=down;++i){
                num[i][left]=k++;
            }
            left++;
            if(left>right){
                break;
            }
            for(int i=left;i<=right;++i){
                num[down][i]=k++;
            }
            down--;
            if(down<up){
                break;
            }
            for(int i=down;i>=up;--i){
                num[i][right]=k++;
            }
            right--;
            if(right<left){
                break;
            }
            for(int i=right;i>=left;--i){
                num[up][i]=k++;
            }
            up++;
            if(up>down){
                break;
            }
        }
        for(int i=1;i<=n;++i){
            for(int j=1;j<=n;++j){
                printf("%-4d",num[i][j]);
            }
            printf("\n");
        }
    }
    return 0;
}
